package ar.com.algotres.tpdos.modelo.fisica.disposiciones;

import java.util.LinkedList;
import java.util.List;

import ar.com.algotres.tpdos.modelo.fisica.BloqueNave;
import ar.com.algotres.tpdos.modelo.fisica.CoordenadasDePosicioInvalidaException;
import ar.com.algotres.tpdos.modelo.fisica.Estado;
import ar.com.algotres.tpdos.modelo.fisica.Posicion;
import ar.com.algotres.tpdos.modelo.fisica.direcciones.Direccion;

public abstract class Orientacion {

	private Direccion direccion;

	public abstract List<BloqueNave> crearBloques(Posicion inicial, int bloques)
			throws CoordenadasDePosicioInvalidaException;

	protected List<BloqueNave> crearBloquesConDireccion(Direccion direccion,
			int cantidadBloques, Posicion inicial)
			throws CoordenadasDePosicioInvalidaException {
		this.direccion = direccion;
		List<BloqueNave> bloques = new LinkedList<>();
		bloques.add(new BloqueNave(inicial, Estado.JUGANDO, 1));
		Posicion siguiente = inicial;
		for (int i = 0; i < cantidadBloques - 1; i++) {
			siguiente = direccion.damePosicionSiguiente(siguiente);
			bloques.add(new BloqueNave(siguiente, Estado.JUGANDO, i + 2));
		}
		return bloques;
	}

	public Direccion direccion() {
		return this.direccion;
	}

	public void invertir() {
		this.direccion = this.direccion.invertir();
	}
}
